package controller

import (
	"bluebell/logic"
	"bluebell/models"
	"github.com/gin-gonic/gin"
	"github.com/go-playground/validator/v10"
	"go.uber.org/zap"
	"net/http"
)

// 用户登录
func LogINHandler(c *gin.Context) {
	var p models.ParamLogIN
	if err := c.ShouldBindJSON(&p); err != nil {
		errs, ok := err.(validator.ValidationErrors)
		if !ok {
			// zap.Any() zap.String()
			zap.L().Error("用户登录传参错误", zap.Error(err))
			c.JSON(http.StatusOK, gin.H{
				// 返回详细的错误信息
				"msg": err.Error(),
			})
			return
		}
		c.JSON(http.StatusOK, gin.H{
			"msg": removeTopStruct(errs.Translate(trans)),
		})
		return
	}
	// 具体登录逻辑
	err, token := logic.LogIN(&p)
	if err != nil {

		zap.L().Error("登录失败", zap.Error(err))
		c.JSON(http.StatusOK, gin.H{
			// 返回详细的错误信息
			"msg": err.Error(),
		})
		return
	}

	// 成功返回响应
	ResponseSuccess(c, token)
}

// 用户注册
func SignUpHandler(c *gin.Context) {
	// 参数校验
	var p models.ParamSignUp
	if err := c.ShouldBindJSON(&p); err != nil {
		// 判断 err 是不是校验器错误类型
		errs, ok := err.(validator.ValidationErrors)
		if !ok {
			// zap.Any() zap.String()
			zap.L().Error("用户注册传参错误", zap.Error(err))
			ResponseErrorWithMsg(c, CodeInvalidParams, err.Error())
			//c.JSON(http.StatusOK, gin.H{
			//	// 返回详细的错误信息
			//	"msg": err.Error(),
			//})
			return
		}
		ResponseErrorWithMsg(c, CodeInvalidParams, removeTopStruct(errs.Translate(trans)))
		//c.JSON(http.StatusOK, gin.H{
		//	"msg":removeTopStruct(errs.Translate(trans)), // 翻译错误
		//})
		return
	}

	// 进一步校验
	//if len(p.Username) == 0 || len(p.Password) == 0 || len(p.RePassword) == 0 || p.RePassword != p.Password {
	//	zap.L().Error("用户注册传参错误")
	//	c.JSON(http.StatusOK, gin.H{
	//		"msg": "请求参数错误",
	//	})
	//	return
	//}

	// 业务处理
	err := logic.SignUp(&p)
	if err != nil {

		ResponseErrorWithMsg(c, CodeServerBusy, err.Error())
		//c.JSON(http.StatusOK, gin.H{
		//	// 返回详细的错误信息
		//	"msg": err.Error(),
		//})
		return
	}
	// 返回响应
	ResponseSuccess(c, nil)
	//c.JSON(200, gin.H{
	//	"msg": "成功",
	//})

}
